/*
 * Copyright (c) 2006, 2022, webrx.cn All rights reserved.
 *
 */
package cn.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * <p>Project: jse2204 - Test
 * <p>Powered by webrx On 2022-10-11 08:51:14
 *
 * @author webrx [webrx@126.com]
 * @version 1.0
 * @since 17
 */
public class Test {
    public static void main(String[] args) throws Exception {
        Class<?> c = Class.forName("cn.reflection.User");
        //System.out.println(c);

        //反射获取类名
        System.out.println(c.getSimpleName());

        //获取构造方法的个数
        Constructor<?>[] cs = c.getConstructors();
        System.out.println(cs.length);

        //获取所有方法
        Method[] ms = c.getDeclaredMethods();
        System.out.println(ms.length);
        System.out.println("---");

        //执行show方法
        //User uu = (User) cs[1].newInstance(10,"李四");
        //uu.show(); 正常调用，不是反射

        //执行构造方法，建立实例对象
        Object o = cs[2].newInstance(100);

        //执行setName(String name)方法 setName("张三丰")
        c.getMethod("setName",String.class).invoke(o,"张三丰");

        //执行show()方法
        Method show = c.getMethod("show");
        show.invoke(o);


        //获取所有属性
        Field[] fs = c.getDeclaredFields();
        System.out.println(fs.length);
        for (Field f : fs) {
            System.out.println(f.getModifiers());
            System.out.println(f.getType().getSimpleName());
            System.out.println(f.getName());
        }


    }
}
